package cz.pecinovsky.english.pojj.adv_demo.cesta_školou.hra;

import static cz.pecinovsky.english.pojj.adv_demo.cesta_školou.hra.SS_CestaSkolou.*;



/*******************************************************************************
 * Instance tridy {@code PrikazPoloz} predstavuje prikaz
 * k vyjmuti predmetu z batohu a jeho umisteni v aktualni mistnosti.
 * Aby byl prikaz proveden, musi byt zadan nazev predmetu
 * a predmet zadaneho nazvu musi byt aktualne v batohu.
 *
 * @author    Rudolf PECINOVSKY
 * @version   5.0
 */
public class PrikazPoloz implements Prikaz
{
//== KONSTANTNI ATRIBUTY TRIDY =================================================
//== PROMENNE ATRIBUTY TRIDY ===================================================
//== KONSTANTNI ATRIBUTY INSTANCI ==============================================

    private final HerniPlan plan;



//== PROMENNE ATRIBUTY INSTANCI ================================================
//== NESOUKROME METODY TRIDY ===================================================

//##############################################################################
//== KONSTRUKTORY A TOVARNI METODY =============================================

    /***************************************************************************
     * Vytvori prikaz, po jehoz zadani se hrac pokusí položit zadaný předmět.
     * Tento předmět musí být v daném okamžiku v batohu.
     */
    PrikazPoloz(HerniPlan plan) {
        this.plan = plan;
    }


//== ABSTRAKTNI METODY =========================================================
//== NESOUKROME METODY INSTANCI ================================================

    /***************************************************************************
     *  Metoda vrací název příkazu (slovo které používá hráč pro jeho vyvolání)
     *
     *  @ return nazev prikazu
     */
    @Override
    public String getNazev() {
        return pPOLOŽ;
    }


    /***************************************************************************
     * Pokusi se vyjmout z batohu a polozit v mistnosti predmet zadaneho nazvu;
     * před tím však zkontroluje, je-li zadán předmět, který se má položit,
     * a je-li tento předmět v batohu.
     *
     * @param  parametry Nazev pokladaneho predmetu
     * @return Text zpravy vypsane po porovedeni prikazu
     */
    @Override
    public String proved( String... parametry )
    {
        if( (parametry != null)      &&
            (parametry.length > 0) )
        {
            String         nazev   = parametry[0];
            HraCestaSkolou hra     = plan.getHra();
            Batoh          batoh   = hra.getBag();
            Objekt         predmet = batoh.vyjmi( nazev );
            if( predmet == null ) {
                return zNEMÁM_PŘEDMĚT + nazev;                  //==========>
            }
            Mistnost am = plan.getAktualniMistnost();
            am.polož(predmet);
            return zPOLOŽENÍ + predmet.getName();              //==========>
        }
        return zPŘEDMĚT_NEZADAN;                                //==========>
    }


//== SOUKROME A POMOCNE METODY TRIDY ===========================================
//== SOUKROME A POMOCNE METODY INSTANCI ========================================
//== VNORENE A VNITRNI TRIDY ===================================================
//== TESTY A METODA MAIN =======================================================
}
